package com.example.objectstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;

public class ObjectStreamDemo1 {
    public static void main(String[] args) throws IOException {

        /**
         * 序列化流（Serialization Stream） 和 反序列化流（Deserialization Stream） 是 Java 中用于对象持久化和网络通信的机制。
         * 它们的主要作用是将对象转换为字节流（序列化），或者将字节流恢复为对象（反序列化）。
         * 这两个过程使得对象可以被存储到文件中或通过网络进行传输。
         */

        /**
         * 类实现了 Serializable 接口，这样它的实例才能被序列化。
         * 为了使 Java 对象可以被序列化，该对象的类需要实现 Serializable 接口。
         * 这个接口没有任何方法，只是一个标记接口，表示该类的对象可以被序列化。
         * 如果类中有一些成员变量不希望被序列化，可以使用 transient 关键字标记。（该字段在序列化时不会被保存）
         */

        /**
         * 在 Java 中，序列化和反序列化需要保证类的版本兼容性。
         * 为了避免版本不兼容的问题，可以显式声明一个 serialVersionUID。
         * 它是一个唯一标识符，用于验证反序列化时类是否一致。
         */

        /**
         * 序列化流/对象操作输出流->对对象进行操作
         * 将对象写入本地文件
         */

        /**
         * 序列化：对象转化为字节流（out）
         * 反序列化：字节流转化为对象（in）
         */

        //1.创建对象
        Student zhangsan = new Student(1, "zhangsan", 23);

        //2.创建序列化流对象/对象操作输出流对象
        /**
         * 字节流
         */
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/com/example/file/student.txt"));

        //3.写出数据
        oos.writeObject(zhangsan);

        //4.释放资源
        oos.close();

    }
}
